﻿/**
 * @file   FITKAbaqusAdaptorConnectorElasticityBehavior.h
 * @brief 连接器弹性行为 适配器
 * @author liuzhonghua (liuzhonghuaszch@163.com)
 * @date 2024-06-26
 */
#ifndef __FITKABAQUSADAPTORCONNECTORELASTICITYBEHAVIOR__H__
#define __FITKABAQUSADAPTORCONNECTORELASTICITYBEHAVIOR__H__

#include "FITKAbaqusAbstractAdaptor.h"
#include "FITK_Kernel/FITKAdaptor/FITKIOAdaptorFactory.h"

ForwardDeclarNS(Interface, FITKAbaConnectorSection)
ForwardDeclarNS(Interface, FITKAbaConnectorBehaviorElasticity)

namespace IO
{
    /**
     * @brief 连接器弹性行为 读写适配器
     * @author liuzhonghua (liuzhonghuaszch@163.com)
     * @date 2024-06-20
     */
    class FITKAbaqusAdaptorConnectorElasticityBehavior : public FITKAbaqusAbstractAdaptor
    {
    public:
        explicit FITKAbaqusAdaptorConnectorElasticityBehavior() = default;
        ~FITKAbaqusAdaptorConnectorElasticityBehavior() = default;

        /**
         * @brief 获取适配器数据类型名
         * @return 适配器数据类型名
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-20
         */
        QString getAdaptorClass() override;

        /**
         * @brief 适配器读取
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-20
         */
        bool adaptR() override;

        /**
         * @brief 适配器写出
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-20
         */
        bool adaptW() override;

        /**
         * @brief 设置写出的行为数据
         * @param[i] elasticityData Interface::FITKAbaConnectorBehaviorElasticity*
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-27
         */
        void setWriteBehaviorData(Interface::FITKAbaConnectorBehaviorElasticity* elasticityData);

    private:
        /**
         * @brief 读取定义类型为线性类型 - 耦合:不耦合
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-27
         */
        bool readDefinitionLinearTypeUncoupled();
        /**
         * @brief 写出定义类型为线性类型 - 耦合:不耦合
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-27
         */
        bool writeDefinitionLinearTypeUncoupled();
        /**
         * @brief 读取定义类型为线性类型 - 耦合:耦合
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-27
         */
        bool readDefinitionLinearTypeCoupled();
        /**
        * @brief 写出定义类型为线性类型 - 耦合:耦合
        * @return 状态 true成功， false失败
        * @author liuzhonghua (liuzhonghuaszch@163.com)
        * @date 2024-06-27
        */
        bool writeDefinitionLinearTypeCoupled();
        /**
         * @brief 读取定义类型为非线性类型 - 耦合:不耦合
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-27
         */
        bool readDefinitionNonlinearTypeUncoupled();
        /**
         * @brief 写出定义类型为非线性类型 - 耦合:不耦合
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-27
         */
        bool writeDefinitionNonlinearTypeUncoupled();
        /**
         * @brief 读取定义类型为非线性类型 - 耦合:位置耦合
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-27
         */
        bool readDefinitionNonlinearTypeCoupledPosition();
        /**
         * @brief 写出定义类型为非线性类型 - 耦合:位置耦合
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-27
         */
        bool writeDefinitionNonlinearTypeCoupledPosition();
        /**
         * @brief 读取定义类型为非线性类型 - 耦合:运动耦合
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-27
         */
        bool readDefinitionNonlinearTypeCoupledMotion();
        /**
         * @brief 写出定义类型为非线性类型 - 耦合:运动耦合
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-27
         */
        bool writeDefinitionNonlinearTypeCoupledMotion();
        /**
         * @brief 读取定义类型为刚性类型
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-26
         */
        bool readDefinitionRigidType();
        /**
         * @brief 写出定义类型为刚性类型
         * @return 状态 true成功， false失败
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-26
         */
        bool writeDefinitionRigidType();

    private:
        /**
         * @brief 连接器数据
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-24
         */
        Interface::FITKAbaConnectorSection* _sectionConnectorData{};
        /**
         * @brief 连接器弹性行为数据
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-26
         */
        Interface::FITKAbaConnectorBehaviorElasticity* _elasticityBehaviorData{};
        /**
         * @brief 变量个数
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-25
         */
        int _dependencies{ 0 };
        /**
         * @brief 组件（力矩）的选项
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date 2024-06-27
         */
        int _component{ 0 };
    };
    Register2FITKIOAdaptorFactory(INP, Interface::FITKAbaConnectorBehaviorElasticity, FITKAbaqusAdaptorConnectorElasticityBehavior)
}

#endif